package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IPolicyCourierDAO;
import org.jsola.hr.dto.PolicyCourierAddDTO;
import org.jsola.hr.dto.PolicyCourierUpdateDTO;
import org.jsola.hr.dto.UpdatePolicySortDTO;
import org.jsola.hr.entity.PolicyCourierDO;
import org.jsola.hr.query.PolicyCourierQuery;
import org.jsola.hr.vo.PolicyCourierListVO;
import org.jsola.hr.vo.PolicyCourierVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 政策速递
 *
 * @author zhr
 */
public interface IPolicyCourierService extends IService<IPolicyCourierDAO, PolicyCourierDO> {

    /**
     * 新增政策速递
     *
     * @param policyCourierAddDTO 新增政策速递DTO
     * @param tokenUser           当前用户
     * @return 政策速递详情信息
     */
    PolicyCourierVO save(PolicyCourierAddDTO policyCourierAddDTO, TokenUser tokenUser);

    /**
     * 修改政策速递
     *
     * @param policyCourierUpdateDTO 修改政策速递DTO
     * @param tokenUser              当前用户
     * @return 更新数量
     */
    int update(PolicyCourierUpdateDTO policyCourierUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除政策速递，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser        当前用户
     * @param policyCourierIds 政策速递id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... policyCourierIds);

    /**
     * 根据政策速递id查找
     *
     * @param policyCourierId 政策速递id
     * @param siteId          所属站点id
     * @return 政策速递详情信息
     */
    PolicyCourierVO selectById(String policyCourierId, String siteId);

    /**
     * 查询政策速递
     *
     * @param policyCourierQuery 查询条件
     * @param siteId             所属站点id
     * @return 政策速递列表信息
     */
    List<PolicyCourierListVO> select(PolicyCourierQuery policyCourierQuery, String siteId);

    /**
     * 查询政策速递记录数
     *
     * @param policyCourierQuery 查询条件
     * @param siteId             所属站点id
     * @return 政策速递记录数
     */
    int selectCount(PolicyCourierQuery policyCourierQuery, String siteId);

    /**
     * 分页查询政策速递
     *
     * @param policyCourierQuery 查询条件
     * @param tokenUser          当前登录用户
     * @return 政策速递列表信息
     */
    Page<PolicyCourierListVO> selectPage(PolicyCourierQuery policyCourierQuery, TokenUser tokenUser);


    /**
     * 根据政策速递id查找
     *
     * @param policyCourierId 政策速递id
     * @param siteId          所属站点id
     * @return 政策速递
     */
    PolicyCourierDO selectDOById(String policyCourierId, String siteId);

    /**
     * 查询政策速递
     *
     * @param policyCourierQuery 查询条件
     * @param siteId             所属站点id
     * @return 政策速递列表
     */
    List<PolicyCourierDO> selectDO(PolicyCourierQuery policyCourierQuery, String siteId);

    /**
     * 更新政策速递排序
     *
     * @param updateSortList 排序参数
     */
    void updateSort(List<UpdatePolicySortDTO> updateSortList);

    /**
     * 根据政策速递类型code删除文章
     *
     * @param code      政策速递类型code
     * @param tokenUser 当前用户
     */
    void deleteByCode(String code, TokenUser tokenUser);

    /**
     * 根据政策速递类型code删除文章
     *
     * @param newCode   新code
     * @param oldCode   旧code
     * @param tokenUser 当前用户
     */
    void updatePolicyCourierCode(String newCode, String oldCode, TokenUser tokenUser);

    /**
     * 查询租户下所有政策速递
     *
     * @param tokenUser 当前用户
     * @return 政策速递
     */
    List<PolicyCourierDO> selectPolicyCourierBySite(TokenUser tokenUser);
}


